DEFINITION MODULE memTest; (* Leo  21-Mar-87. (c) KRONOS *)
                           (* Leo  30-Dec-87. (c) KRONOS *)
                           (* Leo  17-Aug-91. (c) KRONOS *)

IMPORT    SYSTEM;

TYPE WORD = SYSTEM.WORD;
  ADDRESS = SYSTEM.ADDRESS;

VAL
  checked: ADDRESS; (* address currently checked *)


TYPE                      -- err adr  read  writen
  SimpleError  = PROCEDURE ( ADDRESS, WORD, WORD ): BOOLEAN;
                          -- err adr  read  writen invert
  AddressError = PROCEDURE ( ADDRESS, WORD, WORD,  ADDRESS ): BOOLEAN;
                          -- err adr  read  writen invLOW   invHIGH
  OverlapError = PROCEDURE ( ADDRESS, WORD, WORD,  ADDRESS, ADDRESS ): BOOLEAN;


(********************* ReadAfterWrite *************************)
(* По каждому адресу пишется образец и немедленно читается.   *)
(* Ошибка показывает несовпадение записанного и прочитанного  *)
(* значений, и может являться следствием неисправного бита в  *)
(* кристале памяти. При переходе к следующему адресу образец  *)
(* сдвигается циклически влево на один бит,                   *)
(**************************************************************)

PROCEDURE ReadAfterWrite(lo,hi: ADDRESS; pat: WORD; error: SimpleError);

(********************* WriteAllAndRead  ***********************)
(* По каждому адресу пишется образец. При переходе к          *)
(* следующему адресу образец сдвигается циклически влево на   *)
(* один бит. После того как вся область прописана, вся она    *)
(* читается и сравнивается с тем же образцом.                 *)
(* Ошибка показывает несовпадение записанного и прочитанного  *)
(* значений, и может являться следствием неисправного бита в  *)
(* кристале памяти или искажения адреса при чтении записи.    *)
(**************************************************************)


PROCEDURE WriteAllAndRead(lo,hi: ADDRESS; pat: WORD; error: SimpleError);

(************************ FastAddress *************************)
(* По каждому адресу записывает значение побитового XOR       *)
(* самого адреса и образца. Запись производится в прямом или  *)
(* обратном направлении. После заполнение всей области        *)
(* производится чтение и проверка.                            *)
(* Ошибка показывает несовпадение записанного и прочитанного  *)
(* значений, и может являться следствием искажения адреса при *)
(* чтении/записи, перепутывания адресов, или неисправного     *)
(* бита в кристале памяти.                                    *)
(**************************************************************)

PROCEDURE FastAddresses(lo,hi: ADDRESS; pat: BITSET; dir: INTEGER;
                        error: SimpleError);

(************************** Addresses *************************)
(* По каждому адресу записывает значение образца. При переходе*)
(* к следующему адресу значение образца сдвигается циклически *)
(* влево на один бит. Немедленно после записи образца по всем *)
(* адресам отличающегося от текущего в одном бите производится*)
(* побитовое инвертирование их содержимого и при каждом       *)
(* инвертировании проверяется значение по текущему адресу.    *)
(* Ошибка показывает несовпадение записанного и прочитанного  *)
(* значений, и может являться следствием "слипания" адресов   *)
(* чтения/записи, перепутывания адресов, или неисправного     *)
(* бита в кристале памяти.                                    *)
(**************************************************************)


PROCEDURE Addresses(lo,hi: ADDRESS; pat: WORD; error: AddressError);

(*********************** Crowl Test ***************************)
(* Аналогичен Read/Write тестам но работает кусочками по 33   *)
(* слова.                                                     *)
(**************************************************************)

PROCEDURE CrowlWriteAndRead(lo,hi: ADDRESS; pat: WORD; error: SimpleError);

(************************** Overlap ***************************)
(* Записывае инвертированным образцом участок в 33 слова и    *)
(* проверяет что значения в остальной области при этом не     *)
(* исказились. Двигает такой участок от начала до конца       *)
(* области, по 33 слова.                                      *)
(* Ошибка показывает несовпадение записанного и прочитанного  *)
(* значений, и может являться следствием взаимного влияния    *)
(* смежных областей памяти, "слипания" адресов                *)
(* чтения/записи, перепутывания адресов, или неисправного     *)
(* бита в кристале памяти.                                    *)
(**************************************************************)


PROCEDURE Overlap(lo,hi: ADDRESS; pat: WORD; error: OverlapError);

END memTest.
